/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */

//导入数据库操作模块
const db = require("../db/index");
const bcrypt = require("bcryptjs");
// 用这个包来生成 Token 字符串
const jwt = require("jsonwebtoken");
// 导入配置文件
const config = require("../config");
const { query } = require("express");

// 注册用户的处理函数
// exports.regUser = (req, res) => {
//   // 接收表单数据
//   const userinfo = req.body;
//   // 判断数据是否合法
//   //   if (!userinfo.username || !userinfo.password) {
//   //     return res.send({ status: 1, message: "用户名或密码不能为空！" });
//   //   }

//   //定义 SQL 语句
//   //   const sql = `select username, useremail from zc_users where username=? or useremail = ?`;
//   const sql = `select useremail from zc_users where useremail=?`;

//   //执行 SQL 语句并根据结果判断用户名是否被占用
//   db.query(sql, [userinfo.useremail], function (err, results) {
//     // 执行 SQL 语句失败
//     if (err) {
//       //   return res.send({ status: 1, message: err.message })
//       return res.cc(err);
//     }
//     // 用户名被占用
//     if (results.length > 0) {
//       //   return res.send({ status: 1, message: '被占' })
//       return res.cc("邮箱已被占用");
//     }
//     // TODO: 邮箱可用，继续后续流程...
//     // 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
//     userinfo.password = bcrypt.hashSync(userinfo.password, 10);
//     //定义插入用户的 SQL 语句
//     const sql = "insert into zc_users set ?";
//     //调用 db.query() 执行 SQL 语句，插入新用户
//     db.query(
//       sql,
//       {
//         username: userinfo.username,
//         useremail: userinfo.useremail,
//         password: userinfo.password,
//       },
//       function (err, results) {
//         // 执行 SQL 语句失败
//         // if (err) return res.send({ status: 1, message: err.message })
//         if (err) return res.cc(err);
//         // SQL 语句执行成功，但影响行数不为 1
//         // if (results.affectedRows !== 1) {
//         //   return res.send({ status: 1, message: '注册用户失败，请稍后再试！' })
//         // }
//         if (results.affectedRows !== 1) {
//           return res.cc("注册用户失败，请稍后再试！");
//         }
        
//         // 注册成功
//         // res.send({ status: 0,
//         //    message: '注册成功!!' ,
//         //    userId: user.id 
//         //   })
//         res.cc("注册成功！", 0,);
//       }
//     );
//   });

//   // res.send('reguser OK')
// };

exports.regUser = (req, res) => {
  // 接收表单数据
  const userinfo = req.body;
  // 判断数据是否合法
  //   if (!userinfo.username || !userinfo.password) {
  //     return res.send({ status: 1, message: "用户名或密码不能为空！" });
  //   }

  //定义 SQL 语句
  const sql = `select useremail from zc_users where useremail = ?`;

  //执行 SQL 语句并根据结果判断用户名是否被占用
  db.query(sql, [userinfo.useremail], function (err, results) {
    // 执行 SQL 语句失败
    if (err) {
    
      return res.cc(err);
    }
    // 用户名被占用
    if (results.length > 0) {
     
      return res.cc("邮箱已被占用");
    }
    // TODO: 邮箱可用，继续后续流程...
    // 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
    userinfo.password = bcrypt.hashSync(userinfo.password, 10);
    //定义插入用户的 SQL 语句
    const sql = "insert into zc_users set ?";
    //调用 db.query() 执行 SQL 语句，插入新用户
    db.query(
      sql,
      {
        username: userinfo.username,
        useremail: userinfo.useremail,
        password: userinfo.password,
      },
      function (err, results) {
        // 执行 SQL 语句失败
       
        if (err) return res.cc(err);
        // SQL 语句执行成功，但影响行数不为 1
       
        if (results.affectedRows !== 1) {
          return res.cc("注册用户失败，请稍后再试！");
        }
        // 获取新插入的用户ID
        const userId = results.insertId;
       

        const defaultData = [
          [
            '站酷', 
            '站酷ZCOOL,中国设计师互动平台',
            'https://www.zcool.com.cn/', 
            'uploads/recommend/default-站酷.ico', 
             userId 
          ],
          [
            'UI中国', 
            'UI中国用户体验平台',
            'https://www.ui.cn/', 
            'uploads/recommend/default-ui中国.ico', 
             userId 
          ],
          [
            'dribbble', 
            '全球UI设计师作品秀社区',   
            'https://dribbble.com/',  
            'uploads/recommend/default-dirbbble.png',  
            userId 
          ],
          [
            '优设', 
            '中国设计师互动平台',   
            'https://www.uisdc.com/',  
            'uploads/recommend/default-优设.ico', 
             userId 
          ],
          [
            'figma', 
            'figma官方资源社区',   
            'https://www.figma.com/community/',  
            'uploads/recommend/default-figma.ico', 
             userId 
          ],
          [
            '百度', 
            '众里寻她千百度',  
             'https://www.baidu.com/',  
             'uploads/recommend/default-百度.ico',  
             userId 
          ]
          
        ]
        
        console.log(defaultData)
        // const sql = 'INSERT INTO zc_recommend (userId, title, content, logoImg, user_id) VALUES ? '
        // db.query( sql,  [defaultData], (err, results, fields) => {
        //   if (err) return res.cc(err);
          
        //   res.cc("注册成功！", 0,);
        // })
        db.query('INSERT INTO zc_recommend ( title, content, url, logoImg, user_id) VALUES ?', [defaultData], (error, results, fields) => {
          if (error) throw error;
          // 返回成功响应
          res.send({ message: '注册成功' });
        });
        
      }
    );
  });

  // res.send('reguser OK')
};


// 登录的处理函数
exports.login = (req, res) => {

  //接收表单数据
  const userinfo = req.body;

  //定义 SQL 语句
  const sql = `select * from zc_users where useremail = ?`;

  //执行 SQL 语句，查询用户的数据
  db.query(sql, userinfo.useremail, function (err, results) {
    // 执行 SQL 语句失败
    if (err) return res.cc(err);
    // 执行 SQL 语句成功，但是查询到数据条数不等于 1
    if (results.length !== 1) return res.cc("邮箱未被注册");

    // TODO：判断用户输入的登录密码是否和数据库中的密码一致
    // 拿着用户输入的密码,和数据库中存储的密码进行对比
    const compareResult = bcrypt.compareSync(
      userinfo.password,
      results[0].password
    );
    // 如果对比的结果等于 false, 则证明用户输入的密码错误
    if (!compareResult) {
      return res.cc("密码错误");
    }

    // TODO：登录成功，生成 Token 字符串
    // 剔除完毕之后，user 中只保留了用户的 id, username, email 这3个属性的值
    const user = { ...results[0], password: "" };
    // 生成 Token 字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: "100h", // token 有效期为 10 个小时
    });
    //将生成的 Token 字符串响应给客户端
    res.send({
      status: 0,
      message: "登录成功",
      // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
      token: "Bearer " + tokenStr,
      userId: user.id ,
      username: user.username
    });
  });

  //   res.send("login OK");
};


